////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  ltm_1_3_0.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef LTM_1_3_0_H
#define LTM_1_3_0_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "ispglobalelements.h"

#define LTM_1_3_0_NAMESPACE_BEGIN namespace ltm_1_3_0 {
#define LTM_1_3_0_NAMESPACE_END }

LTM_1_3_0_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ltm13_rgn_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct ltm13_rgn_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// la_curve_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   luma adaptation curve
    /// Default Value: 0, 64, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560, 2624, 2688, 2752, 2816, 2880, 2944, 3008, 3072, 3136, 3200, 3264, 3328, 3392, 3456, 3520, 3584, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 4096
    /// Range:         [0, 4095]
    /// Bit Depth:      12u
    /// Length:        65
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct la_curve_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// la_curve - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 0, 64, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560, 2624, 2688, 2752, 2816, 2880, 2944, 3008, 3072, 3136, 3200, 3264, 3328, 3392, 3456, 3520, 3584, 3648, 3712, 3776, 3840, 3904, 3968, 4032, 4096
        /// Length:        65
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT la_curve[65];
    } la_curve_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ltm_scale_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   local tone map scale curve.
    /// Default Value: 1280, 1114, 964, 829, 707, 599, 502, 417, 342, 277, 222, 174, 134, 101, 74, 52, 36, 23, 14, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -3, -6, -11, -19, -29, -43, -61, -84, -111, -145, -184, -231, -285, -347, -418, -498, -588, -588
    /// Range:         [-2048, 2047]
    /// Bit Depth:      12s
    /// Length:        65
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct ltm_scale_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ltm_scale - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 1280, 1114, 964, 829, 707, 599, 502, 417, 342, 277, 222, 174, 134, 101, 74, 52, 36, 23, 14, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -3, -6, -11, -19, -29, -43, -61, -84, -111, -145, -184, -231, -285, -347, -418, -498, -588, -588
        /// Length:        65
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT ltm_scale[65];
    } ltm_scale_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// lce_scale_pos_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   local contrast enhancement curve for positive/negative portion.
    /// Default Value: 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 590, 510, 430, 350, 270, 190, 150
    /// Range:         [0, 2047]
    /// Bit Depth:      12s
    /// Length:        17
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct lce_scale_pos_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// lce_scale_pos - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 590, 510, 430, 350, 270, 190, 150
        /// Length:        17
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT lce_scale_pos[17];
    } lce_scale_pos_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// lce_scale_neg_tab
    ///
    /// Tuning Level:  often_tune
    /// Description:   local contrast enhancement curve for positive/negative portion.
    /// Default Value: 300, 400, 500, 600, 600, 600, 600, 600, 600, 600, 590, 510, 430, 350, 270, 190, 150
    /// Range:         [0, 2047]
    /// Bit Depth:      12s
    /// Length:        17
    /// Conversion:    Bitwidth conversion if pipeline bitwidth is not 14bit
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct lce_scale_neg_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// lce_scale_neg - Array
        ///
        /// Tuning Level:  often_tune
        /// Default Value: 300, 400, 500, 600, 600, 600, 600, 600, 600, 600, 590, 510, 430, 350, 270, 190, 150
        /// Length:        17
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        FLOAT lce_scale_neg[17];
    } lce_scale_neg_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// y_ratio_max
    ///
    /// Tuning Level:  often_tune
    /// Description:   maximum y_ratio
    /// Default Value: 256
    /// Range:         [0, 1023]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             y_ratio_max;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ltm_strength
    ///
    /// Tuning Level:  often_tune
    /// Description:   overall scaling factor that will applied to ltm_scale curve
    /// Default Value: 1.25
    /// Range:         [0.0, 4.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             ltm_strength;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// exp_atten_start
    ///
    /// Tuning Level:  often_tune
    /// Description:   exposure related attenuation start and end
    /// Default Value: 5
    /// Range:         [0, 100]
    /// Bit Depth:     8
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             exp_atten_start;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// exp_atten_end
    ///
    /// Tuning Level:  often_tune
    /// Description:   exposure related attenuation start and end
    /// Default Value: 20
    /// Range:         [0, 100]
    /// Bit Depth:     float
    /// Conversion:    No conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             exp_atten_end;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_boost
    ///
    /// Tuning Level:  often_tune
    /// Description:   scaling factor that will applied to negative portion of ltm_scale curve
    /// Default Value: 1.2
    /// Range:         [0.0, 4.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             dark_boost;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// bright_suppress
    ///
    /// Tuning Level:  often_tune
    /// Description:   scaling factor that will applied to positive portion of ltm_scale curve
    /// Default Value: 1.0
    /// Range:         [0.0, 4.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             bright_suppress;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// lce_strength
    ///
    /// Tuning Level:  often_tune
    /// Description:   scaling factor that will applied to lce_scale curve
    /// Default Value: 1.0
    /// Range:         [0.0, 4.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             lce_strength;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// p0
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   backup core parameters
    /// Default Value: 0.5
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     Q8
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             p0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// p1
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   backup core parameters
    /// Default Value: 0.5
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     Q8
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             p1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_range
    ///
    /// Tuning Level:  often_tune
    /// Description:   define the dark range of LTM scale curve
    /// Default Value: 0.4
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             dark_range;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// bright_range
    ///
    /// Tuning Level:  often_tune
    /// Description:   define the bright range of LTM scale curve
    /// Default Value: 0.25
    /// Range:         [0.0, 1.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             bright_range;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_max
    ///
    /// Tuning Level:  often_tune
    /// Description:   max value of dark part of LTM scale curve
    /// Default Value: 4.25
    /// Range:         [0.0, 8.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             dark_max;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// bright_max
    ///
    /// Tuning Level:  often_tune
    /// Description:   max value of bright part of LTM scale curve
    /// Default Value: 2.0
    /// Range:         [0.0, 4.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             bright_max;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// dark_gamma
    ///
    /// Tuning Level:  often_tune
    /// Description:   gamma value to generate dark boost curve for LTM
    /// Default Value: 3.25
    /// Range:         [1.0, 5.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             dark_gamma;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// bright_gamma
    ///
    /// Tuning Level:  often_tune
    /// Description:   gamma value to generate bright suppression curve
    /// Default Value: 3.25
    /// Range:         [1.0, 5.0]
    /// Bit Depth:     float
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT             bright_gamma;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_ltm13_aec_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_ltm13_aec_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// aec_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    globalelements::trigger_pt_type_aec aec_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ltm13_rgn_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ltm13_rgn_dataType  ltm13_rgn_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_ltm13_hdr_aec_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_ltm13_hdr_aec_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// hdr_aec_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ispglobalelements::trigger_pt_type_aec_hdr hdr_aec_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// hdr_aec_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct hdr_aec_dataStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mod_ltm13_aec_data - Array
        /// Min Length:    1
        /// Max Length:    Unbounded
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32                  mod_ltm13_aec_dataCount;
        UINT32                  mod_ltm13_aec_dataID;
        mod_ltm13_aec_dataType* mod_ltm13_aec_data;
    } hdr_aec_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// mod_ltm13_drc_gain_dataType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct mod_ltm13_drc_gain_dataType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// drc_gain_trigger
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ispglobalelements::trigger_pt_type drc_gain_trigger;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// drc_gain_data
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct drc_gain_dataStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mod_ltm13_hdr_aec_data - Array
        /// Min Length:    1
        /// Max Length:    Unbounded
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32                      mod_ltm13_hdr_aec_dataCount;
        UINT32                      mod_ltm13_hdr_aec_dataID;
        mod_ltm13_hdr_aec_dataType* mod_ltm13_hdr_aec_data;
    } drc_gain_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_ltm13_coreType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_ltm13_coreType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mod_ltm13_drc_gain_data - Array
    /// Min Length:    1
    /// Max Length:    Unbounded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                       mod_ltm13_drc_gain_dataCount;
    UINT32                       mod_ltm13_drc_gain_dataID;
    mod_ltm13_drc_gain_dataType* mod_ltm13_drc_gain_data;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_ltm13_reserveType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_ltm13_reserveType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ltm_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable ltm, independent of igamma
    /// Default Value: 1
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 ltm_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// data_collect_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable data collection
    /// Default Value: 1
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 data_collect_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// img_process_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable image processing
    /// Default Value: 1
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 img_process_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// igamma_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable reverse gamma, independent of ltm_en
    /// Default Value: 1
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 igamma_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// la_en
    ///
    /// Tuning Level:  often_tune
    /// Description:   enable luma adaptation, valid under ltm_en
    /// Default Value: 0
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 la_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mask_filter_en
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   apply filtering to mask, valid under ltm_en
    /// Default Value: 1
    /// Range:         [0,1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 mask_filter_en;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ltm_scale_manual_curve_enable
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable manual LTM Scale curve; otherwise use automatically generated LTM Scale curve.
    /// Default Value: 1
    /// Range:         [0, 1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 ltm_scale_manual_curve_enable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// la_manual_curve_enable
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   enable manual La curve
    /// Default Value: 1
    /// Range:         [0, 1]
    /// Bit Depth:     1u
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 la_manual_curve_enable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// c1
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   weights of R/G/B/MAX(R,G,B) contribute to Y
    /// Default Value: 0.125
    /// Range:         [0.0, 1.0f]
    /// Bit Depth:     float
    /// Conversion:    Q6
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                  c1;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// c2
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   weights of R/G/B/MAX(R,G,B) contribute to Y
    /// Default Value: 0.25
    /// Range:         [0.0, 1.0f]
    /// Bit Depth:     float
    /// Conversion:    Q6
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                  c2;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// c3
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   weights of R/G/B/MAX(R,G,B) contribute to Y
    /// Default Value: 0.125
    /// Range:         [0.0, 1.0f]
    /// Bit Depth:     float
    /// Conversion:    Q6
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                  c3;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// c4
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   weights of R/G/B/MAX(R,G,B) contribute to Y
    /// Default Value: 0.5
    /// Range:         [0.0, 1.0f]
    /// Bit Depth:     float
    /// Conversion:    Q6
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                  c4;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// wt_tab
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   weight for stat filtering
    /// Default Value: 255, 89, 89, 75, 203, 71, 71, 60, 113, 39, 39, 33, 55, 19, 19, 16, 20, 7, 7, 5, 4, 1, 1, 1
    /// Range:         [0,255]
    /// Bit Depth:     8u
    /// Length:        24
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct wt_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// wt - Array
        ///
        /// Tuning Level:  rarely_tune
        /// Default Value: 255, 89, 89, 75, 203, 71, 71, 60, 113, 39, 39, 33, 55, 19, 19, 16, 20, 7, 7, 5, 4, 1, 1, 1
        /// Length:        24
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 wt[24];
    } wt_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mask_filter_kernel_tab
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   mask filtering kernel, when n>1, n means 1-shift-left-(n-1), when n=0, means 0
    /// Default Value: 5,3,3,2,2,1
    /// Range:         [[1,6],[0,5],[0,4],[0,3],[0,2],[0,1]]
    /// Bit Depth:     4u
    /// Length:        6
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct mask_filter_kernel_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mask_filter_kernel - Array
        ///
        /// Tuning Level:  rarely_tune
        /// Default Value: 5,3,3,2,2,1
        /// Length:        6
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 mask_filter_kernel[6];
    } mask_filter_kernel_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mask_rect_curve_tab
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   mask rectification curve
    /// Default Value: 0, 0, 0, 105, 202, 289, 368, 441, 510, 576, 640, 704, 768, 832, 896, 960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560, 2624, 2688, 2752, 2816, 2880, 2944, 3008, 3072, 3136, 3200, 3264, 3328, 3392, 3456, 3520, 3584, 3651, 3722, 3801, 3891, 3991, 4095, 4095, 4095
    /// Range:         [0,4095]
    /// Bit Depth:     12u
    /// Length:        65
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct mask_rect_curve_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// mask_rect_curve - Array
        ///
        /// Tuning Level:  rarely_tune
        /// Default Value: 0, 0, 0, 105, 202, 289, 368, 441, 510, 576, 640, 704, 768, 832, 896, 960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728, 1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560, 2624, 2688, 2752, 2816, 2880, 2944, 3008, 3072, 3136, 3200, 3264, 3328, 3392, 3456, 3520, 3584, 3651, 3722, 3801, 3891, 3991, 4095, 4095, 4095
        /// Length:        65
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32 mask_rect_curve[65];
    } mask_rect_curve_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ltm_curve_tab
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   local tone map curve
    /// Default Value: 0, 256, 512, 752, 992, 1208, 1416, 1592, 1760, 1904, 2016, 2112, 2192, 2256, 2288, 2312, 2328, 2328, 2312, 2288, 2264, 2232, 2192, 2152, 2104, 2056, 2008, 1960, 1904, 1856, 1800, 1752, 1696, 1648, 1592, 1544, 1488, 1440, 1384, 1336, 1280, 1232, 1176, 1128, 1072, 1016, 968, 912, 864, 808, 760, 704, 656, 600, 552, 496, 440, 392, 344, 288, 240, 184, 118, 50, 0 
    /// Range:         [0, 4095]
    /// Bit Depth:      12u
    /// Length:        65
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct ltm_curve_tabStruct
    {

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// ltm_curve - Array
        ///
        /// Tuning Level:  rarely_tune
        /// Default Value: 0, 256, 512, 752, 992, 1208, 1416, 1592, 1760, 1904, 2016, 2112, 2192, 2256, 2288, 2312, 2328, 2328, 2312, 2288, 2264, 2232, 2192, 2152, 2104, 2056, 2008, 1960, 1904, 1856, 1800, 1752, 1696, 1648, 1592, 1544, 1488, 1440, 1384, 1336, 1280, 1232, 1176, 1128, 1072, 1016, 968, 912, 864, 808, 760, 704, 656, 600, 552, 496, 440, 392, 344, 288, 240, 184, 118, 50, 0 
        /// Length:        65
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        INT32 ltm_curve[65];
    } ltm_curve_tab;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// lce_thd
    ///
    /// Tuning Level:  often_tune
    /// Description:   threshold (shift-left-e) of local contrast enhancement
    /// Default Value: 512
    /// Range:         [0,1023]
    /// Bit Depth:     10uQ-e
    /// Conversion:    No Conversion needed
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                 lce_thd;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// r0
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   backup reserved parameters
    /// Default Value: 0.5
    /// Range:         [0, 1.0f]
    /// Bit Depth:     float
    /// Conversion:    Q8
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                  r0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// r1
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   backup reserved parameters
    /// Default Value: 0.5
    /// Range:         [0, 1.0f]
    /// Bit Depth:     float
    /// Conversion:    Q8
    /// Notes:         none
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                  r1;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_ltm13Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatix_ltm13Type
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable_section
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct enable_sectionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        globalelements::enable_flag_type ltm_enable;
    } enable_section;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// control_variables
    ///
    /// Default Value: control_drc_gain, control_aec_exp_sensitivity_ratio, control_lux_idx
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct control_variablesStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// control_var_type - Array
        /// Default Value: control_drc_gain, control_aec_exp_sensitivity_ratio, control_lux_idx
        /// Length:        3
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        enum class control_var_typeEnum
        {
            control_drc_gain                  = 0,
            control_exp_time_ratio            = 1,
            control_aec_exp_sensitivity_ratio = 2,
            control_lux_idx                   = 3,
            control_gain                      = 4
        } control_var_type[3];
    } control_variables;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// control_method
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct control_methodStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// aec_exp_control
        /// Default Value: control_lux_idx
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ispglobalelements::tuning_control_aec_type     aec_exp_control;

        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// aec_hdr_control
        /// Default Value: control_aec_exp_sensitivity_ratio
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ispglobalelements::tuning_control_aec_hdr_type aec_hdr_control;
    } control_method;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_ltm13_reserve
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_ltm13_reserveType chromatix_ltm13_reserve;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// chromatix_ltm13_core
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_ltm13_coreType    chromatix_ltm13_core;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatix_ltm13TypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatix_ltm13TypeClass : public ParameterModule, public chromatix_ltm13Type
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 3;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_ltm13TypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatix_ltm13TypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatix_ltm13TypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ltm13_rgn_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadltm13_rgn_dataType(
        ParameterFileSymbolTableEntry* entry,
        ltm13_rgn_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ltm13_rgn_dataType_la_curve_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadltm13_rgn_dataType_la_curve_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        ltm13_rgn_dataType::la_curve_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ltm13_rgn_dataType_ltm_scale_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadltm13_rgn_dataType_ltm_scale_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        ltm13_rgn_dataType::ltm_scale_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ltm13_rgn_dataType_lce_scale_pos_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadltm13_rgn_dataType_lce_scale_pos_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        ltm13_rgn_dataType::lce_scale_pos_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load ltm13_rgn_dataType_lce_scale_neg_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadltm13_rgn_dataType_lce_scale_neg_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        ltm13_rgn_dataType::lce_scale_neg_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_ltm13_aec_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_ltm13_aec_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_ltm13_aec_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_ltm13_hdr_aec_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_ltm13_hdr_aec_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_ltm13_hdr_aec_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_ltm13_hdr_aec_dataType_hdr_aec_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_ltm13_hdr_aec_dataType_hdr_aec_dataStruct(
        ParameterFileSymbolTableEntry* entry,
        mod_ltm13_hdr_aec_dataType::hdr_aec_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_ltm13_drc_gain_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_ltm13_drc_gain_dataType(
        ParameterFileSymbolTableEntry* entry,
        mod_ltm13_drc_gain_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load mod_ltm13_drc_gain_dataType_drc_gain_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmod_ltm13_drc_gain_dataType_drc_gain_dataStruct(
        ParameterFileSymbolTableEntry* entry,
        mod_ltm13_drc_gain_dataType::drc_gain_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_ltm13_coreType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_ltm13_coreType(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13_coreType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_ltm13_reserveType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_ltm13_reserveType(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13_reserveType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_ltm13_reserveType_wt_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_ltm13_reserveType_wt_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13_reserveType::wt_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_ltm13_reserveType_mask_filter_kernel_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_ltm13_reserveType_mask_filter_kernel_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13_reserveType::mask_filter_kernel_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_ltm13_reserveType_mask_rect_curve_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_ltm13_reserveType_mask_rect_curve_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13_reserveType::mask_rect_curve_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_ltm13_reserveType_ltm_curve_tabStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_ltm13_reserveType_ltm_curve_tabStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13_reserveType::ltm_curve_tabStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatix_ltm13Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadchromatix_ltm13Type(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load enable_sectionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadenable_sectionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13Type::enable_sectionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13Type::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load control_variablesStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadcontrol_variablesStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13Type::control_variablesStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load control_methodStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadcontrol_methodStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatix_ltm13Type::control_methodStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_ltm13_hdr_aec_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_ltm13_hdr_aec_dataType(
        mod_ltm13_hdr_aec_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_ltm13_hdr_aec_dataType_hdr_aec_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_ltm13_hdr_aec_dataType_hdr_aec_dataStruct(
        mod_ltm13_hdr_aec_dataType::hdr_aec_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_ltm13_drc_gain_dataType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_ltm13_drc_gain_dataType(
        mod_ltm13_drc_gain_dataType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload mod_ltm13_drc_gain_dataType_drc_gain_dataStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadmod_ltm13_drc_gain_dataType_drc_gain_dataStruct(
        mod_ltm13_drc_gain_dataType::drc_gain_dataStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatix_ltm13_coreType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadchromatix_ltm13_coreType(
        chromatix_ltm13_coreType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatix_ltm13Type
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void Unloadchromatix_ltm13Type(
        chromatix_ltm13Type* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatix_ltm13TypeClass

LTM_1_3_0_NAMESPACE_END
#endif // LTM_1_3_0_H

